package dynamicStudy;

public class NumDecodings {

    /**
     * LeetCode T91 解码方法
     * @param args
     */
    public static void main(String[] args) {
        String s = "12";
        numDecodings(s);
    }

    public static int numDecodings(String s) {
        //排除具有前导0的字符串
        if (s.charAt(0) == '0'){
            return 0;
        }

        int len = s.length();
        //确定状态，状态为解码方式总数
        int[] dp = new int[len+1]; //默认初始化dp[0]=0

        //进行初始化
        dp[0] = 1;
        dp[1] = 1;
        for (int i = 2; i < len + 1; i++){
            //判断单独一个数字
            if (s.charAt(i - 1) != '0'){
                dp[i] = dp[i - 1];
            } else {
                if (s.charAt(i - 2) == '0'){
                    return 0;
                }
            }
            //判断有两个数字时
            if (s.charAt(i - 2) == '1'){
                dp[i] = dp[i] + dp[i - 2];
            } else if (s.charAt(i - 2) == '2' && s.charAt(i - 1) >= '0' && s.charAt(i - 1) <= '6'){
                dp[i] = dp[i] + dp[i - 2];
            }
        }
        return dp[len];
    }
}
